diff --git a/swh/web/ui/static/css/style.css b/swh/web/ui/static/css/style.css
index 3be28aa3b..b77c63e03 100644
--- a/swh/web/ui/static/css/style.css
+++ b/swh/web/ui/static/css/style.css
@@ -1,211 +1,211 @@
 /*
 version:   0.1
 date:      21/09/15
 author:    swh
 email:     swh
 website:   softwareheritage.org
 version history: /style.css
 */
 
 @import url(https://fonts.googleapis.com/css?family=Alegreya:400,400italic,700,700italic);
 @import url(https://fonts.googleapis.com/css?family=Alegreya+Sans:400,400italic,500,500italic,700,700italic,100,300,100italic,300italic);
 
 body {
     font-family: 'Alegreya Sans', sans-serif;
     font-size: 1.6rem;
     line-height: 1.5;
     color: rgba(0, 0, 0, 0.55);
     padding-top: 65px;  /* avoid fixed bootstrap navbar covers content */
 }
 
 .heading {
     font-family: 'Alegreya', serif;
 }
 
 .shell, .text {
     font-size: 0.7em;
 }
 
 img.swh-logo {
     max-height: 40px;
 }
 
 .jumbotron {
     padding: 0;
     background-color: rgba(0, 0, 0, 0);
     position: fixed;
     top: 0;
     width: 100%;
 }
 
 #swh-navbar-collapse {
     border-top-style: none;
     border-left-style: none;
     border-right-style: none;
     border-bottom: 5px solid;
     border-image: linear-gradient(to right, rgb(226, 0, 38) 0%, rgb(254, 205, 27) 100%) 1 1 1 1;
     width: 100%;
 }
 
 .nav-horizontal {
     float: right;
 }
 
 h3[id], h4[id] {  /* avoid in-page links covered by navbar */
     padding-top: 65px;
     margin-top: -65px;
     display: inline-block; /* webkit compatibility */
 }
 
 a               { color: #377ba8; }
 h1, h2, h3, h4  { margin: 0;
                   color: #e20026;
                 }
 h1              { font-size: 1.8em; }
 h2              { font-size: 1.2em; }
 
 a               {
                   color: rgba(0, 0, 0, 0.75);
                   border-bottom-style: dotted;
                   border-bottom-width: 1px;
                   border-bottom-color: rgb(91, 94, 111);
                 }
 
 a:hover         {
                   color: black;
                 }
 
 ul.dropdown-menu > li > a,
 ul.dropdown-menu > li > ul > li > a,
 .navbar-header > a,
 ul.navbar-nav > li > a { /* No decoration on links in dropdown menu */
                   border-bottom-style: none;
                 }
 
 .navbar-header > a,
 ul.navbar-nav > li > a {
     color: #323232;
     font-weight: 700;
 }
 
 .navbar-header > a:hover,
 ul.navbar-nav > li > a:hover {
     color: #8f8f8f;
 }
 
 .sitename .first-word, .sitename .second-word {
     font-weight: normal;
     font-size: 1.8rem;
 }
 
 .sitename .first-word {
     font-family: 'Alegreya Sans', sans-serif;
 }
 
 .sitename .second-word {
     font-family: 'Alegreya', serif;
 }
 
 ul.dropdown-menu > li,
 ul.dropdown-menu > li > ul > li { /* No decoration on bullet points in dropdown menu */
                   list-style-type: none;
                 }
 
 .page           { margin: 2em auto; width: 35em; border: 5px solid #ccc;
                   padding: 0.8em; background: white; }
 .entries        { list-style: none; margin: 0; padding: 0; }
 .entries li     { margin: 0.8em 1.2em; }
 .entries li h2  { margin-left: -1em; }
 .add-entry      { font-size: 0.9em; border-bottom: 1px solid #ccc; }
 .add-entry dl   { font-weight: bold; }
 .metanav        { text-align: right; font-size: 0.8em; padding: 0.3em;
                   margin-bottom: 1em; background: #fafafa; }
 .flash          { background: #cee5F5; padding: 0.5em;
                   border: 1px solid #aacbe2; }
 .error          { background: #f0d6d6; padding: 0.5em; }
 
 .file-found     { color: #23BA49; }
 .file-notfound  { color: #FF4747; }
 
 /* Bootstrap custom styling to correctly render multiple
  * form-controls in an input-group:
  *                github.com/twbs/bootstrap/issues/12732 */
 
 .input-group-field {
     display: table-cell;
     vertical-align: middle;
     border-radius:4px;
     min-width:1%;
     white-space: nowrap;
 }
 
 .input-group-field .form-control {
     border-radius: inherit !important;
 }
 
 .input-group-field:not(:first-child):not(:last-child) {
     border-radius:0;
 }
 
 .input-group-field:not(:first-child):not(:last-child) .form-control {
     border-left-width: 0;
     border-right-width: 0;
 }
 
 .input-group-field:last-child {
     border-top-left-radius:0;
     border-bottom-left-radius:0;
 }
 
 .input-group > span:not(:last-child) > button {
    border-radius: 0;
 }
 
 .multi-input-group > .input-group-btn {
   vertical-align: bottom;
   padding: 0;
 }
 
 .dataTables_filter input {
     width: 70%;
     float: right;
 }
 
-.api-doc-route-upcoming h4 {
+tr.api-doc-route-upcoming > td {
     color: orange;
 }
 
-.api-doc-route-deprecated h4 {
+tr.api-doc-route-deprecated > td {
     color: red;
 }
 
 #back-to-top {
   display: initial;
   position: fixed;
   bottom: 30px;
   right: 30px;
   z-index: 10;
 }
 
 #back-to-top a img {
   display: block;
   width: 32px;
   height: 32px;
   background-size: 32px 32px;
   text-indent: -999px;
   overflow: hidden;
 }
 
 .table > thead > tr > th {
     border-bottom: 1px solid #e20026;
 }
 
 .table > tbody > tr > td {
     border-style: none;
 }
 
 pre {
     border: 1px dashed black;
     border-radius: 10px;
     background-color: hsl(47, 99%, 75%);
 }
diff --git a/swh/web/ui/templates/api-endpoints.html b/swh/web/ui/templates/api-endpoints.html
index ed90f5d4c..0de9f8089 100644
--- a/swh/web/ui/templates/api-endpoints.html
+++ b/swh/web/ui/templates/api-endpoints.html
@@ -1,42 +1,53 @@
 {% extends "layout.html" %}
 {% block title %}API Overview{% endblock %}
 {% block content %}
 
 <div class="api-doc">
-  <p>This lists the current API endpoints for version 1.</p>
+  This lists the current API endpoints for version 1. For a more general description, please refer
+  to <a href="/api/">the main documentation</a>.
 
-  <p>
-    For a more general description, please refer
-    to <a href="/api/">the main documentation</a>.
-  </p>
-
-  <p>
-  The currently opened endpoints are blue. You can follow them for a
-  more detailed description.  The other endpoints are upcoming and are
-  not followable for now.
-  </p>
+  <noscript>
   <p>
     <ul>
     {% for route, doc in doc_routes %}
       <li><a href="#{{ route }}">{{ route }}</a></li>
     {% endfor %}
     </ul>
   </p>
+  </noscript>
 </div>
 
-<div class="api-doc">
-  <!-- List api endpoints -->
-  {% for route, doc in doc_routes %}
-    {% if 'tags' in doc and doc['tags'] is not none %}
-  <div class="api-doc-route{% for tag in doc['tags'] %} api-doc-route-{{ tag }}{% endfor %}">
-    <h4 id="{{ route }}"> {{ route }} </h4>
-    ({{ ', '.join(doc['tags']) }})
-    {% else %}
-  <div class="api-doc-route">
-    <h4 id="{{ route }}"> <a href="{{ route }}">{{ route }}</a> </h4>
-    {% endif %}
-    {% autoescape off %}{{ doc['docstring'] | safe_docstring_display }}{% endautoescape %}
-  </div>
-  {% endfor %}
+<div class="api-doc table-responsive">
+  <table class="table table-striped search-res swhtable">
+    <thead class="thead-default">
+      <th>Route</th>
+      <th>Status</th>
+      <th>Description</th>
+    </thead>
+    <tbody>
+      {% for route, doc in doc_routes %}
+      <tr class="api-doc-route{% for tag in doc['tags'] %} api-doc-route-{{ tag }} {% endfor %}">
+        <td id="{{ route }}"><a href="{{ route }}">{{ route }}</a></td>
+        {% if 'tags' in doc and doc['tags'] is not none %}
+        <td>{{ ', '.join(doc['tags']) }}</td>
+        {% else %}
+        <td>opened</td>
+        {% endif %}
+        <td>{{ doc['docstring'] | safe_docstring_display | safe }}</td>
+      </tr>
+      {% endfor %}
+    </tbody>
+  </table>
 </div>
+<script type="text/javascript">
+  $(document).ready(function() {
+    $('table.swhtable').DataTable({
+         "paging": false,
+         "info": false,
+         "order": [[1, "asc"]]
+      });
+    $(".dataTables_filter input").addClass("form-control")
+
+  });
+</script>
 {% endblock %}